#ifndef cexceptions_TryCatchContextStack_h
#define cexceptions_TryCatchContextStack_h

struct _TryCatchContextStack;
typedef struct _TryCatchContextStack * TryCatchContextStack_t;

#include <stdlib.h>
#include <cexceptions/Throwable.h>

#pragma GCC diagnostic ignored "-Wformat"
#pragma GCC diagnostic ignored "-Wformat-extra-args"

TryCatchContextStack_t TryCatchContextStack_default();
TryCatchContextStack_t TryCatchContextStack_allocate(size_t count);
TryCatchContextStack_t TryCatchContextStack_construct(TryCatchContextStack_t);
TryCatchContextStack_t TryCatchContextStack_destruct(TryCatchContextStack_t);
struct __jmp_buf_tag * TryCatchContextStack_push(TryCatchContextStack_t);
TryCatchContextStack_t TryCatchContextStack_pop(TryCatchContextStack_t);
void TryCatchContextStack_throw(TryCatchContextStack_t, int type, char * message, int code, Throwable_t previous, char * file, int line);
void TryCatchContextStack_propagate(TryCatchContextStack_t);
Throwable_t TryCatchContextStack_getException(TryCatchContextStack_t);

#endif